package com.witsight.platform.dao;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.NoRepositoryBean;

import com.witsight.platform.model.IBaseObject;

import joinery.DataFrame;

/**   
 * 说明：自定义的动态Sq实现 ,共通Dao
 * @Title: DynamicJpaSqlRepository.java 
 * @Package com.witsight.hibernate.dao 
 * @See: {@link CommonRepository}
 * Copyright: Copyright (c) 2017
 * Company:sany huax witsight team by product
 * @author: penght  
 * @date: 2017年9月15日 上午11:50:01 
 * @version: V1.0
 *
 */
@NoRepositoryBean
public abstract interface CommonRepository {
	
	/**
	 * 
	 * 说明：根据map参数取得所有数据 (SQL)
	 * @Title: findSqlAllByParams
	 * @See: {@link #findSqlAllByParams(String, IBaseObject)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param params 检索条件map对象(IBaseObject或者BoEntity)
	 * @return 
	 * @date: 2017年9月15日 下午1:45:28
	 */
	abstract <O> List<O> findSqlAllByParams(String queryName, IBaseObject params);
	
	/**
	 * 
	 * 说明：根据map参数取得一条数据 (Sql)
	 * @Title: findSqlOneByParams
	 * @See: {@link #findSqlOneByParams(String, IBaseObject)}
	 * @author penght
	 * @param queryName  namequery中配置的key
	 * @param mapObject 检索条件map对象(IBaseObject或者BoEntity)
	 * @return 一条数据
	 * @date: 2017年9月15日 上午10:25:38
	 */
	abstract <O> O findSqlOneByParams(String queryName, IBaseObject params);
	
	/**
	 * 
	 * 说明：根据翻页取得所有的对象，通过动态hql
	 * @Title: findSqlPageByParams
	 * @See: {@link #findSqlPageByParams(String, IBaseObject, Pageable)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param mapObject 检索条件map对象(IBaseObject或者BoEntity)
	 * @param pageable 翻页参数
	 * @return 翻页结果集合
	 * @date: 2017年9月15日 上午10:25:47
	 */
	abstract <O> Page<O> findSqlPageByParams(String queryName, IBaseObject params, Pageable pageable);
	
	/**
	 * 
	 * 说明：根据map参数取得所有BoEntity数据 (Hql)
	 * @Title: findDataFramesByParams
	 * @See: {@link #findDataFramesByParams(String, IBaseObject)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param params 检索条件map对象(IBaseObject或者BoEntity)
	 * @return 所有BoEntity数据
	 * @date: 2017年9月18日 下午2:37:28
	 */
	abstract DataFrame<Object> findDataFramesByParams(String queryName, IBaseObject params);
}
